// index/pages/search/search.js
const { searchService } = require('../../../utils/searchService.js');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    inputValue: "", // 搜索输入框内容
    historyList: [], // 搜索历史记录
    searchResults: [], // 搜索结果
    totalCount: 0, // 搜索结果总数
    pageNum: 1, // 当前页码
    pageSize: 5, // 每页大小（改为10，减少单次加载量）
    hasMore: false, // 是否有更多数据
    loading: false, // 是否正在加载
    searchTimeout: null, // 搜索防抖定时器
    isLoadingMore: false, // 是否正在加载更多（新增）
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.loadSearchHistory();
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 每次显示页面时刷新历史记录
    this.loadSearchHistory();
  },

  /**
   * 加载搜索历史
   */
  loadSearchHistory() {
    const history = searchService.getSearchHistory();
    this.setData({
      historyList: history
    });
  },

  /**
   * 输入框内容变化时触发
   */
  onInputChange(e) {
    const value = e.detail.value;
    this.setData({
      inputValue: value
    });

    // 清除之前的定时器
    if (this.data.searchTimeout) {
      clearTimeout(this.data.searchTimeout);
    }

    // 如果输入内容为空，清空搜索结果并显示历史记录
    if (!value || !value.trim()) {
      this.setData({
        searchResults: [],
        totalCount: 0,
        hasMore: false
      });
      return;
    }

    // 设置防抖搜索（500ms后自动搜索）
    const timeout = setTimeout(() => {
      this.performSearch(value.trim());
    }, 500);

    this.setData({
      searchTimeout: timeout
    });
  },

  /**
   * 执行搜索
   */
  async performSearch(keyword) {
    if (!keyword || !keyword.trim()) {
      return;
    }

    this.setData({
      loading: true,
      pageNum: 1, // 重置为第一页
      searchResults: [],
      totalCount: 0,
      hasMore: false
    });

    try {
      console.log('开始搜索，关键词:', keyword);
      const res = await searchService.searchQuestionBanks(keyword, 1, this.data.pageSize);
      
      console.log('搜索返回数据:', res);
      console.log('返回数据类型:', typeof res);
      console.log('返回数据是否为对象:', res && typeof res === 'object');
      
      if (res && res.rows) {
        const { rows, total } = res;
        console.log('解析后的数据:', { rows, total });
        
        this.setData({
          searchResults: rows || [],
          totalCount: total || 0,
          hasMore: (rows || []).length >= this.data.pageSize && (total || 0) > this.data.pageSize
        });
        
        console.log('设置后的数据:', this.data.searchResults);
        console.log('设置后的总数:', this.data.totalCount);
        console.log('是否有更多数据:', this.data.hasMore);
      } else {
        console.log('返回数据格式不正确，res:', res);
        this.setData({
          searchResults: [],
          totalCount: 0,
          hasMore: false
        });
      }
    } catch (error) {
      console.error('搜索失败:', error);
      
      // 根据错误类型显示不同的提示
      if (error.code === 401) {
        wx.showModal({
          title: '需要登录',
          content: '搜索功能需要登录，是否前往登录页面？',
          success: (res) => {
            if (res.confirm) {
              wx.navigateTo({
                url: '/my/pages/Login/Login'
              });
            }
          }
        });
      } else {
        wx.showToast({
          title: '搜索失败，请重试',
          icon: 'none'
        });
      }
      
      this.setData({
        searchResults: [],
        totalCount: 0,
        hasMore: false
      });
    } finally {
      this.setData({
        loading: false
      });
    }
  },

  /**
   * 搜索按钮点击事件（立即搜索，不等待防抖）
   */
  onSearch() {
    const keyword = this.data.inputValue.trim();
    if (!keyword) {
      wx.showToast({
        title: '请输入搜索关键词',
        icon: 'none'
      });
      return;
    }
    
    // 清除防抖定时器，立即搜索
    if (this.data.searchTimeout) {
      clearTimeout(this.data.searchTimeout);
      this.setData({
        searchTimeout: null
      });
    }
    
    this.performSearch(keyword);
  },

  /**
   * 加载更多
   */
  async onLoadMore() {
    if (this.data.loading || this.data.isLoadingMore || !this.data.hasMore) {
      console.log('加载更多被阻止:', {
        loading: this.data.loading,
        isLoadingMore: this.data.isLoadingMore,
        hasMore: this.data.hasMore
      });
      return;
    }

    const nextPage = this.data.pageNum + 1;
    console.log('开始加载第', nextPage, '页数据');
    
    this.setData({
      isLoadingMore: true
    });

    try {
      const res = await searchService.searchQuestionBanks(
        this.data.inputValue, 
        nextPage, 
        this.data.pageSize
      );
      
      if (res && res.rows) {
        const newResults = [...this.data.searchResults, ...res.rows];
        const hasMore = res.rows.length >= this.data.pageSize && (this.data.totalCount > newResults.length);
        
        this.setData({
          searchResults: newResults,
          pageNum: nextPage,
          hasMore: hasMore
        });
        
        console.log('加载更多成功，当前页:', nextPage, '总数据量:', newResults.length, '是否有更多:', hasMore);
        
        // 显示加载成功提示
        if (res.rows.length > 0) {
          wx.showToast({
            title: `已加载${res.rows.length}条数据`,
            icon: 'success',
            duration: 1000
          });
        }
      }
    } catch (error) {
      console.error('加载更多失败:', error);
      wx.showToast({
        title: '加载失败，请重试',
        icon: 'none'
      });
    } finally {
      this.setData({
        isLoadingMore: false
      });
    }
  },

  /**
   * 点击历史记录标签
   */
  onTagTap(e) {
    const keyword = e.currentTarget.dataset.keyword;
    this.setData({
      inputValue: keyword
    });
    this.performSearch(keyword);
  },

  /**
   * 删除单个历史记录
   */
  onDeleteHistory(e) {
    const keyword = e.currentTarget.dataset.keyword;
    searchService.removeSearchHistoryItem(keyword);
    this.loadSearchHistory();
  },

  /**
   * 清空搜索历史
   */
  onClearHistory() {
    wx.showModal({
      title: '确认清空',
      content: '确定要清空所有搜索历史吗？',
      success: (res) => {
        if (res.confirm) {
          searchService.clearSearchHistory();
          this.loadSearchHistory();
        }
      }
    });
  },

  /**
   * 点击搜索结果项
   */
  onCourseTap(e) {
    const course = e.currentTarget.dataset.course;
    console.log('点击课程:', course);
    
    if (!course || !course.questionBankId) {
      wx.showToast({
        title: '题库信息不完整',
        icon: 'none'
      });
      return;
    }
    
    // 跳转到题库详情页面
    wx.navigateTo({
      url: `/index/pages/questionBank/questionBank?questionBankId=${course.questionBankId}&subjectId=${course.subjectId || ''}`,
      success: () => {
        console.log('跳转题库详情页面成功');
      },
      fail: (err) => {
        console.error('跳转失败:', err);
        wx.showToast({
          title: '跳转失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    if (this.data.inputValue) {
      this.performSearch(this.data.inputValue);
    }
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    console.log('触底事件触发，hasMore:', this.data.hasMore, 'isLoadingMore:', this.data.isLoadingMore);
    
    if (this.data.hasMore && !this.data.isLoadingMore && !this.data.loading) {
      console.log('开始自动加载更多数据');
      this.onLoadMore();
    }
  },

  /**
   * 页面卸载时清理定时器
   */
  onUnload() {
    if (this.data.searchTimeout) {
      clearTimeout(this.data.searchTimeout);
    }
  }
});